#include <iostream>
using namespace std;
#include <set>
#include <map>
void test_set()
{
    set<int> s;
    s.insert(3);
    s.insert(1);
    s.insert(4);
    s.insert(3);
    s.insert(7);
    s.insert(8);
    set<int>::iterator it = s.begin();
    while (it != s.end())
    {
        cout << *it << " ";
        it++;
    }
    cout << endl;

    set<int>::iterator pos = s.find(3);
    if (pos != s.end())
    {
        s.erase(pos);
    }

    set<int>::iterator it2 = s.begin();
    while (it2 != s.end())
    {
        cout << *it2 << " ";
        it2++;
    }
    cout << endl;
}
typedef pair<int, int> kv;
void test2_map()
{
    map<int, int> m;
    m.insert(kv(1, 1));
    m.insert(kv(2, 2));
    m.insert(kv(3, 3));

    auto it = m.begin();
    while (it != m.end())
    {
        cout << it->first << ":" << it->second << endl;
        it++;
    }
    cout << endl;
}

void test3_map()
{
    string arr[] = {"西瓜", "樱桃", "苹果", "西瓜", "西瓜", "樱桃", "苹果", "西瓜"};
    map<string, int> m;
    for (auto &e : arr)
    {
        // auto ret = m.find(e);
        // if (ret != m.end())
        // {
        //     ret->second++;
        // }
        // else
        // {
        //     m.insert(make_pair(e, 1));
        // }
        m[e]++;
    }

    for (const auto &e : m)
    {
        cout << e.first << ":" << e.second << endl;
    }
    cout << endl;
}
int main()
{
    // test_set();
    // test2_map();
    test3_map();
    return 0;
}